﻿#ifndef TREEDATA_H
#define TREEDATA_H

#include <QString>
#include <QMap>
#include <QList>
#include <QHash>
#include <QMultiHash>
#include <QQueue>
#include <QFile>
#include <QTextStream>
#include <QtDebug>
#include <QDate>


class TreeNode
{
public:
//    ~TreeNode(){
//        qDebug()<<ID<<Name<<"DIED";
//    };
    int ID;
    QString Name;
    QString Birthplace;
    QString Gender;
    double Stature;
    QString Job;
    QString EduBg;
    QString Birthday;
    QString Deathday;
    QString HighestJob;
    QString LifeTime;
    TreeNode* FatherNode;
    TreeNode* PartnerNode;
    QList<int> SonList;
};

class Tree{
public:
    Tree();
    bool inputDataFromFile(QString curFilePath);//打开文件（导入族谱）
    void addValue(int FaterID, int PartnerID, QStringList Data);//添加成员
    void updateValue(int id, QStringList Data);//更新成员信息
    QList<int> deleteValue(int id);//删除成员信息
    void clear();//缓存清除
    QStringList readValue(int id);//查询函数
    QList<int> searchKW(QString input, QString information);//检索功能
    QList<int> searchRL(int ID, QString relative);//查询某人亲戚
    QList<int> getALLID();//获取ID
    bool outputDataToFile(QString curFilePath);//关闭前写出文件保存
    TreeNode* getValueFromID(int id);//获取ID
    double getAvgLife();//平均寿命
    int getProportion();//男女比例
    double getAvgStature();//平均身高
    QString getAvgEdu();//平均教育水平
    double getAvgPerson();//平均家庭人口
    bool isFather(int id);//判断是否有儿子
    bool isMother(int id);//判断是否有儿子

    int root;
    int MaxID;
    //这个是记录当前最大的ID
private:
    QHash<int, TreeNode*> idHash;

    //出生日期，死亡日期和学历的哈希表，用于信息查询时的快速查找
    QMultiHash<QString, int> birthdayHash;
    QMultiHash<QString, int> deathdayHash;
    QMultiHash<QString, int> eduBgHash;
    //这两个成员可以用来记录不同性别，不同学历的人数
    QMap<QString, int> genderCount;
};


#endif // TREEDATA_H
